Here's a quick rundown of how to set up windows:
1. Create  a hole for the window.
2. Create the window glass using a regular brush and apply a plain colour texture named something like '*glass' to it. The only important part of the texture name is the * at the start, since that's what tells Quake that it's water, and what will allow it to be transparent.
3. Put a clip brush around the window frame to restrict movement. I think stopping the player even getting into the frame is good, so I make the clip brushes a little bit larger than the window glass and make it fill the entire frame.
4. Since you can still shoot through the glass, you need to put an invisible func_wall in the same place as the glass. I do this by copying the glass brushes, and turning them into a func_wall and then applying the 'skip' texture so that the compiler will remove the brush's faces and they will not be visible, yet still collideable.
5. For the water, just use regular water brushes. If you want water that touches a window, you can just leave a gap and apply the '*waterskip' texture to make the faces invisible. If the water surface must touch the glass, you can use a wedge so that the water brush is not actually hitting the glass along its surface. You can see an example of this in the map. You can also try creative combination of glass and water on individual faces to get the results you want. apsp2 has several examples for you to look at.

Once this is all done, the hardest part is just getting it to look good in game. You'll need to play around with the colour of the glass, water, the r_wateralpha value, fog values and lighting to get it to look right.

Courtesy of Andrew Palmer, 2016